package com.hzit.hzb.core.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.hzit.hzb.core.properties.OssProperties;
import com.hzit.hzb.core.service.FileService;
import org.springframework.stereotype.Service;

import java.io.InputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@Service
public class FileServiceImpl implements FileService {

	//1. 文件上传
	@Override
	public String upload(InputStream inputStream, String filename) {
		// Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
		String endpoint = OssProperties.ENDPOINT;
		// 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。

		// 填写Bucket名称，例如examplebucket。
		String bucketName = OssProperties.BUCKETNAME;
		// 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
		String format = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));  // 文件夹
		String uuid = UUID.randomUUID().toString();                         // 主文件名
		String suffix = filename.substring(filename.lastIndexOf("."));  // 文件后缀名
		String module = "dict";
		// https://hzit-images2.oss-cn-shenzhen.aliyuncs.com/2024/08/17/32cc142e-3678-4ca8-bb22-4ea37f2a1aa6.jpg
		// 文件的完整限定名
		String objectName = module + "/" + format + "/" + uuid + suffix;
		// 填写本地文件的完整路径，例如D:\\localpath\\examplefile.txt。
		// 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。
		// String filePath= "D:\\localpath\\examplefile.txt";

		// 2024/8/20/xxxxx.jpg
		// 创建OSSClient实例。
		String accessId = OssProperties.ACCESSKEY;

		String accessSecret = OssProperties.ACCESSSECRET;
		OSS ossClient = new OSSClientBuilder().build(endpoint,accessId,accessSecret);

		try {

			// 创建PutObjectRequest对象。
			PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
			// 创建PutObject请求。
			PutObjectResult result = ossClient.putObject(putObjectRequest);
		} catch (Exception oe) {
			oe.printStackTrace();
		} finally {
			if (ossClient != null) {
				ossClient.shutdown();
			}
		}

		return "https://" + bucketName + "." + endpoint + "/" + objectName;
	}
}
